//
//  main.c
//  c primer plus  four
//
//  Created by huanghui on 16/7/24.
//  Copyright © 2016年 huanghui. All rights reserved.
//

//c primer plus 第五版练习题

#include <stdio.h>

#include <string.h>

#include <float.h>

int main(int argc, const char * argv[]) {
    
    //第一题 读入名姓，以名字，姓氏的格式打印出来
    
    char sunrname[20],name[20];
    
    printf("请输入你的名字：");
    
    scanf("%s",name);
    
    printf("请输入你的姓氏：");
    
    scanf("%s",sunrname);
    
    printf("name：%s\nsunrname:%s\n",name,sunrname);
    
    //第二题 要求输入名字，按要求打印出来
    
    char name2[30];
    
    printf("请输入你的名字：");
    
    scanf("%s",name2);
    
    printf("\"%20s\"\n",name2);//在宽度为20的字段内打印字符，并且整个字段在引号内
    
    printf("\"%-20s\"\n",name2);//在宽度为20的字段的左端打印字符，并且整个字段在引号内
    int stringleenth = (int)strlen(name2);
    
    printf("%*s\n",stringleenth+3,name2);//在比名字宽3个字符的字段内打印函数
    
    //第三题 编写一个程序，读取一个浮点数，并且以小数点计数法，然后以指数计数法打印之
   
    
    float f;
    
    printf("请输入一个浮点数：");
    
    scanf("%f",&f);
    
    printf("The input is %.1f or %.1e\n",f,f);
    
    printf("The input is +%.3f or %.3e\n",f,f);
    
    
    //第四题 编写一个程序，要求输入身高(以英寸为单位)和名字，然后按要求打印出来
    
    char name4[30];
    
    float stature;
    
    printf("请输入你的身高：");
    
    scanf("%f",&stature);
    
    printf("请输入你的名字：");
    
    scanf("%s",name4);
    
    printf("%s,you are %.3f feet tall",name4,stature);
    
    //第五题 编写一个程序，首先要求用户输入名字，然后要求用户输入姓氏。在一行打印输入的姓名。在下一行打印每个字母的个数。把字母个数和相应名字的结尾对齐
    
    char sunrname5[20],name5[20];
    
    int sunrname5lenth,name5lenth;
    
    
    printf("请输入你的名字：");
    
    scanf("%s",name5);
    
    printf("请输入你的姓氏：");
    
    scanf("%s",sunrname5);
    
    name5lenth = (int)strlen(name5);
    
    sunrname5lenth = (int)strlen(sunrname5);
    
    printf("%s %s\n%*d %*d\n",sunrname5,name5,sunrname5lenth,sunrname5lenth,name5lenth,name5lenth);
    
    int name5lenth2 = -name5lenth,sunrname5lenth2 = -sunrname5lenth;

    
    printf("%s %s\n%*d %*d\n",sunrname5,name5,sunrname5lenth2,sunrname5lenth,name5lenth2,name5lenth);
    
    //第六题 编写一个程序设置一个值为1.0/3.0的double类型变量和一个值为1.0/3.0的flost类型变量。每个变量显示3次：一次在小数点右侧显示4个数字，一次12，一次16.同时要让程序包括float.h文件并显示FLT_DIG和DBL_DIG的值。
    
    float flo = 1.0/3.0;
    
    double dou = 1.0/3.0;
    
    printf("flo4＝%.4f flo12=%.12f flo16=%.16f\n",flo,flo,flo);
    
    printf("dou4=%.4lf dou12=%.12lf dou16=%.16lf\n",dou,dou,dou);
    
    printf("FLT_DIG=%d DBL_DIG=%d\n",FLT_DIG,DBL_DIG);
    
    //第七题 把每加仑英里改成每一百公里多少升
    
    double gallon,mile;
    
    printf("请输入你行驶的英里数：");
    
    scanf("%lf",&mile);
    
    printf("请输入此次消耗油的加仑数：");
    
    scanf("%lf",&gallon);
    
    const double km_l = (100*gallon/mile)*(3.875/1.609);
    
    printf("每一百公里耗油%lf升",km_l);
    
    return 0;
}
